package Offer58;

/**
 * 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。
 * 比如，输入字符串"abcdefg"和数字2，该函数将返回左旋转两位得到的结果"cdefgab"。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @author 23737
 * @Time 2021.9.8
 */
public class Text_two {
    public static void main(String[] args) {
        String s = "abcdefg";
        int n = 2;
        System.out.println(new Solution().reverseLeftWords(s, n));
    }
}

/*个人题解：纯字符串函数，先分隔再拼接，但是这个也不是面试官想要的答案*/
class Solution {
    public String reverseLeftWords(String s, int n) {
//        String substringHead = s.substring(0, n);
////        System.out.println(substringHead);
//        String substringTail = s.substring(n);
////        System.out.println(substringTail);
//        StringBuilder stringBuilder = new StringBuilder();
//        StringBuilder append = stringBuilder.append(substringTail).append(substringHead);
////        System.out.println(append);
//        return String.valueOf(append);

        //效率低
        StringBuilder stringBuilder = new StringBuilder();
        String substring = s.substring(0, n);
        String substring1 = s.substring(n);
        return String.valueOf(stringBuilder.append(substring1).append(substring));
    }
}

/*官方题解*/
class SolutionOffer {
    public String reverseLeftWords(String s, int n) {
        StringBuilder res = new StringBuilder();
        for(int i = n; i < s.length(); i++)
            res.append(s.charAt(i));
        for(int i = 0; i < n; i++)
            res.append(s.charAt(i));
        return res.toString();
    }
}


